﻿#include <iostream>
using namespace std;

#include <set>
#include <map>
#include <string>

//set/map学习

//int main()
//{
//	set<int,greater<int>> s; //排序+去重
//	s.insert(1);
//	s.insert(2);
//	s.insert(3);
//	s.insert(4);
//	s.insert(5);
//	s.insert(1);
//	s.insert(2);
//
//	//auto sit = s.begin();
//	//while (sit != s.end()) //迭代器访问
//	//{
//	//	cout << *(sit++) << " ";
//	//}
//	//cout << endl;
//
//	for (const auto& x : s)
//	{
//		cout << x << " ";
//	}
//	cout << endl;
//	return 0;
//
//}

//int main()
//{
//	multiset<int> ms; //允许插入重复值
//	ms.insert(1);
//	ms.insert(2);
//	ms.insert(3);
//	ms.insert(4);
//	ms.insert(5);
//	ms.insert(1);
//	ms.insert(5);
//
//	for (const auto& x : ms)
//	{
//		cout << x << " ";
//	}
//	cout << endl;
//
//	return 0;
//}


//int main()
//{
//	//make_pair函数通过模板推导返回pair对象
//	//KV模型 其中参数为const K,V
//	//key不可修改，V可以修改
//	map<string, string> m;
//	m.insert(pair<string, string>("string", "字符串"));
//	m.insert(pair<string, string>("vector", "向量"));
//	m.insert(pair<string, string>("queue", "队列"));
//	m.insert(make_pair("stack", "栈"));
//	m.insert(make_pair("list", "链表"));
//	
//	auto mit = m.begin();
//	while (mit != m.end())
//	{
//		cout << mit->first << " : " << mit->second << endl;
//		++mit;
//	}
//	cout << endl;
//	m["list"] = "(链表)";
//	for (const auto& x : m)
//	{
//		cout << x.first << " : " << x.second << endl;
//	}
//
//	return 0;
//}


int main()
{
	string s[] = { "西瓜", "西瓜", "苹果", "西瓜", "苹果", "苹果", "西瓜", "苹果", "香蕉", "苹果", "香蕉", "梨" };
	map<string, int> m;
	
	//[] 的作用
	//1.插入
	//2.修改
	//3.插入+修改
	//4.查询

	//[]如果x不存在则插入，如果存在则返回value(的引用)
	for (auto& x : s)
	{
		m[x]++;
	}

	for (const auto& x : m)
	{
		cout << x.first << " : " << x.second << endl;
	}


	return 0;
}